// CEDE - 因果涌现对话引擎 v1.0 基座模型

use std::io::{self, Write};

mod types;
mod utils;
mod symbol_table;
mod causal_graph;
mod knowledge_graph;
mod memory_system;
mod dialogue_engine;

use dialogue_engine::DialogueEngine;

fn main() {
    println!("CEDE - 因果涌现对话引擎 v1.0 基座模型");
    println!("输入 'help' 查看帮助，输入 'quit' 退出程序");
    println!("------------------------------------------");
    
    // 创建对话引擎
    let mut engine = DialogueEngine::new();
    
    // 主循环
    loop {
        print!("你: ");
        io::stdout().flush().unwrap();
        
        let mut input = String::new();
        io::stdin().read_line(&mut input).unwrap();
        let input = input.trim();
        
        if input.is_empty() {
            continue;
        }
        
        // 处理特殊命令
        match input {
            "quit" | "exit" | "退出" => {
                println!("再见！");
                break;
            }
            "help" | "帮助" => {
                print_help();
                continue;
            }
            "stats" | "统计" => {
                print_stats(&engine);
                continue;
            }
            "topics" | "主题" => {
                print_topics(&engine);
                continue;
            }
            _ => {}
        }
        
        // 生成并输出回应
        let response = engine.respond(input);
        println!("CEDE: {}", response);
    }
}

// 打印帮助信息
fn print_help() {
    println!("可用命令:");
    println!("  help/帮助 - 显示此帮助信息");
    println!("  stats/统计 - 显示系统统计信息");
    println!("  topics/主题 - 显示当前对话主题");
    println!("  quit/exit/退出 - 退出程序");
    println!();
    println!("CEDE 是一个基于因果涌现的对话引擎，能够:");
    println!("  - 动态构建符号表和因果片段图");
    println!("  - 学习和记忆对话内容");
    println!("  - 基于上下文生成智能回应");
    println!("  - 支持中英文混合对话");
}

// 打印统计信息
fn print_stats(engine: &DialogueEngine) {
    println!("系统统计信息:");
    println!("  对话轮次: {}", engine.turn_count);
    println!("  符号表大小: {}", engine.symbol_table.symbols.len());
    println!("  因果片段数量: {}", engine.causal_graph.fragments.len());
    println!("  知识实体数量: {}", engine.knowledge_graph.entities.len());
    println!("  短期记忆数量: {}", engine.memory_system.short_term.len());
    println!("  中期记忆数量: {}", engine.memory_system.medium_term.len());
    println!("  长期记忆数量: {}", engine.memory_system.long_term.len());
    println!("  当前对话状态: {:?}", engine.current_state);
    println!("  当前对话意图: {:?}", engine.current_intent);
}

// 打印当前主题
fn print_topics(engine: &DialogueEngine) {
    println!("当前对话主题:");
    if engine.current_topics.is_empty() {
        println!("  (无主题)");
    } else {
        for (i, &topic_id) in engine.current_topics.iter().enumerate() {
            if let Some(text) = engine.symbol_table.get_text(topic_id) {
                println!("  {}. {}", i + 1, text);
            }
        }
    }
}